package com.furb.pub.apresentacao;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;

import com.furb.pub.controle.produto.Adicional;
import com.furb.pub.controle.produto.Produto;
import com.furb.pub.controle.produto.ProdutoBase;
import com.furb.pub.controle.sistema.Cliente;
import com.furb.pub.controle.sistema.Mesa;
import com.furb.pub.controle.sistema.PedidoCliente;
import com.furb.pub.controle.sistema.Setor;
import com.furb.pub.controle.sistema.Sistema;
import java.awt.GridLayout;
import javax.swing.JTable;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowFocusListener;
import java.awt.event.WindowEvent;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;

public class FrmNovoPedido extends JFrame {

	private JPanel contentPane;
	JComboBox<ProdutoBase> cbProduto = new JComboBox<ProdutoBase>();
	private JTable tblAdicionais;
	private ArrayList<Adicional> adicionais = new ArrayList<Adicional>();
	private PedidoCliente pedidoCliente;

	/**
	 * Create the frame.
	 * @throws Exception 
	 */
	public FrmNovoPedido(PedidoCliente p) throws Exception {
		pedidoCliente = p;
		addWindowFocusListener(new WindowFocusListener() {
			public void windowGainedFocus(WindowEvent arg0) {
				carregarAdicionais();
			}
			public void windowLostFocus(WindowEvent arg0) {
			}
		});
		
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JPanel panel = new JPanel();
		contentPane.add(panel, BorderLayout.NORTH);
		
		JLabel lblProduto = new JLabel("Produto");
		panel.add(lblProduto);
		
		panel.add(cbProduto);
		
		JButton btnAdicional = new JButton("+ Adicional");
		btnAdicional.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				FrmNovoAdicional frmAdicional;
				try {
					frmAdicional = new FrmNovoAdicional(adicionais);
					frmAdicional.show();
										
					carregarAdicionais();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		
		JLabel lblQtde = new JLabel("Qtde");
		panel.add(lblQtde);
		
		final JSpinner edQtde = new JSpinner();
		edQtde.setModel(new SpinnerNumberModel(new Integer(1), new Integer(1), null, new Integer(1)));
		panel.add(edQtde);
		panel.add(btnAdicional);
		
		JPanel panel_2 = new JPanel();
		contentPane.add(panel_2, BorderLayout.CENTER);
		panel_2.setLayout(new GridLayout(1, 0, 0, 0));
		
		tblAdicionais = new JTable();
		panel_2.add(tblAdicionais);
		
		JPanel panel_1 = new JPanel();
		contentPane.add(panel_1, BorderLayout.SOUTH);
		
		JButton btnSalvar = new JButton("Salvar");
		btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				pedidoCliente.setProduto((Produto) cbProduto.getSelectedItem());
				pedidoCliente.getProduto().adicionarAdicionais(adicionais);
				pedidoCliente.setQuantidade((int) edQtde.getValue());
				FrmNovoPedido.this.dispose();
			}
		});
		panel_1.add(btnSalvar);
		
		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				FrmNovoPedido.this.dispose();
			}
		});
		panel_1.add(btnCancelar);
		
		try {
			carregarProdutos();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			throw new Exception("Erro ao carregar produtos");
		}
	}
	
	private void carregarProdutos() throws Exception {
		try{
			Vector<ProdutoBase> comboBoxItems = new Vector<ProdutoBase>();
			for (ProdutoBase p : Sistema.getInstance().getProdutos()) {
				comboBoxItems.add(p);
			}
			
		    final DefaultComboBoxModel<ProdutoBase> model = new DefaultComboBoxModel<ProdutoBase>(comboBoxItems);
		    cbProduto.setModel(model);
		} catch(Exception e){
			throw new Exception("Erro ao carregar produtos");
		}
	}
	
	private void carregarAdicionais() {
		tblAdicionais.removeAll();
		DefaultTableModel modelNovo = new DefaultTableModel();
		modelNovo.addColumn("Nome");
		modelNovo.addColumn("Valor");
		
		for (Adicional a : adicionais) {
			modelNovo.addRow(new Object[] {a.getNome(), a.getValor()});
		}	
		tblAdicionais.setModel(modelNovo);			
	}
}
